package com.shared_file_bucket;

import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class MainGUI extends Application {

    private static String url;

    @Override
    public void start(Stage primaryStage) {
        Label label = new Label("欢迎使用共享文件桶");
        Image icon = new Image(getClass().getResourceAsStream("/image/logo.png"));

        Button copyButton = new Button("复制地址到浏览器打开");
         ImageView qrCodeView = generateQRCode(url);
//        ImageView logoView = new ImageView(icon);
//        logoView.setFitWidth(200); // 设置宽度为100像素
//        logoView.setFitHeight(150); // 设置高度为100像素

        Label urlLabel = new Label(url);

        // 设置按钮事件
        copyButton.setOnAction(event -> {
            // 复制地址到剪贴板
            copyToClipboard(url);
        });

        // 创建 VBox 并设置组件在垂直方向上的对齐方式和间距
        VBox vbox = new VBox();
        vbox.setAlignment(Pos.CENTER);
        vbox.setSpacing(10); // 设置组件之间的间距

        // 将组件添加到 VBox 中
        vbox.getChildren().addAll(label, qrCodeView, urlLabel, copyButton);

        // 创建 StackPane 并设置组件在水平方向上的对齐方式
        StackPane root = new StackPane(vbox);
        root.setAlignment(Pos.CENTER);

        // 设置背景色
        root.setStyle("-fx-background-color: #5FB878;");

        // 创建场景并设置窗口
        Scene scene = new Scene(root, 300, 360);
        primaryStage.setTitle("共享文件桶");
        primaryStage.setScene(scene);

        // 加载并设置窗口图标

        primaryStage.getIcons().add(icon);


        // 设置窗口关闭事件监听器
        primaryStage.setOnCloseRequest(event -> {
            // 关闭服务
            SharedFileBucketApplication.closeApplicationContext();

            Platform.exit();
            System.exit(0);
        });

        // 显示窗口
        primaryStage.show();
    }

    public static void setUrl(String url) {
        MainGUI.url = url;
    }

    /**
     * 生成二维码并显示
     * @param text
     * @return
     */
    private ImageView generateQRCode(String text) {
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        try {
            BitMatrix bitMatrix = qrCodeWriter.encode(text, com.google.zxing.BarcodeFormat.QR_CODE, 200, 200);
            BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix);
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            ImageIO.write(bufferedImage, "png", byteArrayOutputStream);
            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
            return new ImageView(new javafx.scene.image.Image(byteArrayInputStream));
        } catch (WriterException | IOException e) {
            e.printStackTrace();
            return new ImageView();
        }
    }

    /**
     * 复制文本到剪贴板
     * @param text
     */
    private void copyToClipboard(String text) {
        javafx.scene.input.Clipboard clipboard = javafx.scene.input.Clipboard.getSystemClipboard();
        javafx.scene.input.ClipboardContent content = new javafx.scene.input.ClipboardContent();
        content.putString(text);
        clipboard.setContent(content);
    }
}
